080f69f7446769e480385362e98b2e7d5421c7cd,src/org/opencms/db/generic/CmsHistoryDriver.java,CmsHistoryDriver,deleteEntries,#CmsDbContext#I_CmsHistoryResource#number#number#,133
Before Change
// make sure the statement and the result is closed
m_sqlManager.closeAll(dbc, null, stmt, res);
// nothing to delete
internalCleanup(dbc, conn, resource);
return 0;
}
m_sqlManager.closeAll(dbc, null, stmt, res);
After Change
ResultSet res = null;
try {
conn = m_sqlManager.getConnection(dbc);
int maxVersion = -1;
// get the maximal version number for this resource
stmt = m_sqlManager.getPreparedStatement(conn, "C_STRUCTURE_HISTORY_MAXVER");
stmt.setString(1, resource.getStructureId().toString());
res = stmt.executeQuery();
if (res.next()) {
maxVersion = res.getInt(1);
while (res.next()) {
// do nothing only move through all rows because of mssql odbc driver
}
} else {
// make sure the connection is closed
m_sqlManager.closeAll(dbc, conn, stmt, res);
// nothing to delete
internalCleanup(dbc, resource);
return 0;
}
m_sqlManager.closeAll(dbc, conn, stmt, res);
if (time >= 0) {
int maxVersionByTime = -1;
conn = m_sqlManager.getConnection(dbc);
// get the maximal version to keep for this resource based on the time parameter
stmt = m_sqlManager.getPreparedStatement(conn, "C_STRUCTURE_HISTORY_MAXVER_BYTIME");
stmt.setString(1, resource.getStructureId().toString());
stmt.setLong(2, time);
res = stmt.executeQuery();
if (res.next()) {
maxVersionByTime = res.getInt(1);
while (res.next()) {
// do nothing only move through all rows because of mssql odbc driver
}
}
m_sqlManager.closeAll(dbc, conn, stmt, res);
if (maxVersionByTime > 0) {
if (versionsToKeep < 0) {
versionsToKeep = (maxVersion - maxVersionByTime);
} else {
versionsToKeep = Math.min(versionsToKeep, (maxVersion - maxVersionByTime));
}
}
}
if (maxVersion - versionsToKeep <= 0) {
// nothing to delete
internalCleanup(dbc, resource);
return 0;
}
// get the minimal structure publish tag to keep for this sibling
int minStrPublishTagToKeep = -1;
conn = m_sqlManager.getConnection(dbc);
stmt = m_sqlManager.getPreparedStatement(conn, "C_HISTORY_READ_MAXTAG_FOR_VERSION");
stmt.setString(1, resource.getStructureId().toString());
stmt.setInt(2, 1 + maxVersion - versionsToKeep);
res = stmt.executeQuery();
if (res.next()) {
minStrPublishTagToKeep = res.getInt(1);
while (res.next()) {
// do nothing only move through all rows because of mssql odbc driver
}
} else {
// make sure the statement and the result is closed
m_sqlManager.closeAll(dbc, conn, stmt, res);
// nothing to delete
internalCleanup(dbc, resource);
return 0;
}
m_sqlManager.closeAll(dbc, conn, stmt, res);
if (minStrPublishTagToKeep < 1) {
// nothing to delete
internalCleanup(dbc, resource);
return 0;
}
minStrPublishTagToKeep++;
// delete the properties
conn = m_sqlManager.getConnection(dbc);
stmt = m_sqlManager.getPreparedStatement(conn, "C_PROPERTIES_HISTORY_DELETE");
stmt.setString(1, resource.getStructureId().toString());
stmt.setInt(2, minStrPublishTagToKeep);
stmt.executeUpdate();
m_sqlManager.closeAll(dbc, null, stmt, null);
// delete the structure entries
stmt = m_sqlManager.getPreparedStatement(conn, "C_STRUCTURE_HISTORY_DELETE");
stmt.setString(1, resource.getStructureId().toString());
stmt.setInt(2, minStrPublishTagToKeep);
int structureVersions = stmt.executeUpdate();
m_sqlManager.closeAll(dbc, null, stmt, null);
// get the minimal resource publish tag to keep,
// all entries with publish tag less than this will be deleted
int minResPublishTagToKeep = -1;
stmt = m_sqlManager.getPreparedStatement(conn, "C_HISTORY_READ_MIN_USED_TAG");
stmt.setString(1, resource.getResourceId().toString());
res = stmt.executeQuery();
if (res.next()) {
minResPublishTagToKeep = res.getInt(1);
while (res.next()) {
// do nothing only move through all rows because of mssql odbc driver
}
} else {
// make sure the statement and the result is closed
m_sqlManager.closeAll(dbc, conn, stmt, res);
// nothing to delete
internalCleanup(dbc, resource);
return structureVersions;
}
m_sqlManager.closeAll(dbc, conn, stmt, res);